package org.koyi.jsonUtil;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.koyi.entities.Bares;
import org.koyi.entities.BaresCervezasTapasVasos;

import android.content.Context;

/**
 * Clase utlizada para parsear un JSONObject
 * @author juan bautista
 *
 */
public class JsonParser {
	
	private static final String TAG_LOCALES = 			"locales";
	private static final String TAG_BAR = 				"bar";
	private static final String TAG_CERVEZAS = 			"cervezas";
	private static final String TAG_NOMBRE_CERVEZA = 	"nombre";
	private static final String TAG_TIPO_CERVEZA = 		"tipo";
	private static final String TAG_VASO_CERVEZA = 		"vaso";
	private static final String TAG_PRECIO_CERVEZA = 	"precio";
	private static final String TAG_FOTO = 				"foto";
	private static final String TAG_LATITUD = 			"latitud";
	private static final String TAG_LONGITUD = 			"longitud";
	
	private List<BaresCervezasTapasVasos> listaBirras = null;
	private List<Bares> listaBares = null;
	private JsonAssets jsonAssets = null;
	private Context context = null;
	private JSONArray locales = null;
	private JSONObject jsonObject = null;
	
	/**
	 * Constructor que utilizamos cuando parseamos el JSON desde la carpeta Assets
	 * @param context
	 */
	public JsonParser(Context context)
	{
		this.context = context;
		this.jsonAssets = new JsonAssets(this.context);
	}
	
	/**
	 * Constructor utilizado para cuando parseamos una vez obtenido el JSONObject de una URL
	 * @param jSonObject
	 */
	public JsonParser(JSONObject jSonObject)
	{
		this.jsonObject = jSonObject;
	}
	
	/**
	 * Metodo utilizado para parsear el JSOn una vez lo obtenemos de una URL
	 * @return List<BaresCervezasTapasVasos>
	 */
	public List<Bares> getListaBares()
	{
		listaBares = new ArrayList<Bares>();
		listaBirras = new ArrayList<BaresCervezasTapasVasos>();
		Bares bares = new Bares();
		
		JSONObject jsonObject =  this.jsonObject;
		
		try 
		{
			
			locales = jsonObject.getJSONArray(TAG_LOCALES);
			
			for(int i=0, m=locales.length(); i != m; i++)
			{
				listaBirras = new ArrayList<BaresCervezasTapasVasos>();
				bares = new Bares();
				
				JSONObject bar = locales.getJSONObject(i);
				
				String nombre = bar.getString(TAG_BAR);
				String foto = bar.getString(TAG_FOTO);
				
				String[] arrayFoto = foto.split("\\.");
				foto = arrayFoto[0];
				
				String latitud = bar.getString(TAG_LATITUD);
				String longitud = bar.getString(TAG_LONGITUD);
				
				JSONArray cervezas = bar.getJSONArray(TAG_CERVEZAS);
				
				bares.setNombre(nombre);
				bares.setLongitud(Double.valueOf(longitud));
				bares.setLatitud(Double.valueOf(latitud));
				bares.setFoto(foto);
				
				for(int j=0, k=cervezas.length(); j != k; j++)
				{
					JSONObject cerveza = cervezas.getJSONObject(j);
					
					String nombreCerveza = cerveza.getString(TAG_NOMBRE_CERVEZA);
					String tipoCerveza = cerveza.getString(TAG_TIPO_CERVEZA);
					String vasoCerveza = cerveza.getString(TAG_VASO_CERVEZA);
					Double precioCerveza = cerveza.getDouble(TAG_PRECIO_CERVEZA);
					
					BaresCervezasTapasVasos baresCerv 
						= new BaresCervezasTapasVasos(nombreCerveza, tipoCerveza, vasoCerveza, null, 
													  precioCerveza, Double.valueOf(latitud), Double.valueOf(longitud),
													  foto);
					
					listaBirras.add(baresCerv);
				}
				
				bares.setListaBirras(listaBirras);
				listaBares.add(bares);
			}
			
		} 
		catch (JSONException e) 
		{
			e.printStackTrace();
		}
		
		return listaBares;
	}
	
	/*
	 * Metodo que utilizamos para parsear el JSON desde la carpeta Assets
	 * @return List<BaresCervezasTapasVasos>
	 *
	public List<BaresCervezasTapasVasos> getListaBaresAssets()
	{
		listaBares = new ArrayList<BaresCervezasTapasVasos>();
		
		JSONObject jsonObject =  jsonAssets.getJson();
		
		try 
		{
			
			locales = jsonObject.getJSONArray(TAG_LOCALES);
			
			for(int i=0, m=locales.length(); i != m; i++)
			{
				JSONObject bar = locales.getJSONObject(i);
				
				String nombre = bar.getString(TAG_BAR);
				String foto = bar.getString(TAG_FOTO);
				
				String[] arrayFoto = foto.split("\\.");
				foto = arrayFoto[0];
				
				String latitud = bar.getString(TAG_LATITUD);
				String longitud = bar.getString(TAG_LONGITUD);
				
				JSONArray cervezas = bar.getJSONArray(TAG_CERVEZAS);
				
				for(int j=0, k=cervezas.length(); j != k; j++)
				{
					JSONObject cerveza = cervezas.getJSONObject(j);
					
					String nombreCerveza = cerveza.getString(TAG_NOMBRE_CERVEZA);
					String tipoCerveza = cerveza.getString(TAG_TIPO_CERVEZA);
					String vasoCerveza = cerveza.getString(TAG_VASO_CERVEZA);
					String precioCerveza = cerveza.getString(TAG_PRECIO_CERVEZA);
					
					BaresCervezasTapasVasos baresCerv 
						= new BaresCervezasTapasVasos(nombreCerveza, tipoCerveza, vasoCerveza, "Montadito", 
													  precioCerveza, nombre, Double.valueOf(latitud), Double.valueOf(longitud),
													  foto);
					
					listaBares.add(baresCerv);
					
					break;
				}
			}
			
		} 
		catch (JSONException e) 
		{
			e.printStackTrace();
		}
		
		return listaBares;
	}*/
}
